<?php

/**
 * winbinder 패키지 
 * 
 * 
 * @package php.ui.winbinder
 */


/**
 * WBStatusBar
 *
 * <code>
 * $status = new WBStatusBar(array(
 *  'parent' => $window,
 *  'items' => array(
 *		array('test1', 20),
 *		array('test2', 30),
 *		array('test3', null),
 *   ),
 * ));
 * 
 * </code>
 *
 * @package php.ui.winbinder
 */
class WBStatusBar extends WBControl {

	private $_data = array();
	private $_childControl = array();
	
	/**
	 * 생성자 
	 * 
	 */
	public function __construct($options = array()) { 
		$options['class'] = StatusBar;

		parent::__construct($options);
	}

	protected function initComponent() { 
		parent::initComponent();

		if (isset($this->items))	{
			$items = $this->getOption('items'); 
			$this->createItems($items);

			foreach ($items as $i => $item) { 
				if (is_array($item)) { 
					$this->_data[$i] = $item[0];
				} else { 
					$this->_data[$i] = $item;
				}
			}
		}
	}

	/**
	 * status bar 데이타 설정 
	 * 
	 * @param string $text 
	 * @param int $index 
	 */  
	public function setText($text, $index = 0) { 
		parent::setText($text, $index);
		
		$this->_data[$index] = $text;
	}
	
	public function getText($index = 0) { 
		return $this->_data[$index];
	}
	
	public function addControl($pos, $options)  {
		$control = wbcreate($options, $this);
		
		$this->setChildControl($pos, $control);
		
		return $control;
	}
	
	public function setChildControl($pos, $obj) { 
		$obj->extern('SetParent', $this);
		$obj->visible = true;
		
		$this->setControlInPos($pos, $obj);
	}
	
	public function setControlInPos($pos, $obj) { 
		$this->_childControl[$pos] = $obj;
	}

	public function getControlInPos($pos) { 
		return $this->_childControl[$pos];
	}	
	
	/**
	 * set StatusBar's size
	 * 
	 * statusbar 에 적용된 각각의 필드들을 넓이를 구해서 다시 재정렬 시킨다. 
	 * 
	 * -1 : 전체에서 나머지 배분 
	 * int : 픽셀 고정 
	 * float : 전체에서 % 로 픽셀 계산 , 0.0 ~ 1.0
	 * 
	 * @see WBComponent#setSize($width, $height)
	 */
	public function setSize($width, $height) { 

		// statusbar size 조절 , -1 은 전체, int 는 픽셀, 0.0 ~ 1.0 는 % 적용
		$items = $this->getOption('items');
		$len = count($items);
		$temp = $width;
		$count = 0;
		$arr = array();
		for($i = 0; $i < $len; $i++) { 
			$item = $items[$i]; 
			
			if (!is_array($item) ) {
				$item   = array($item, -1);
				$items[$i] = $item;
			}			
			
			if ($item[1] == -1) { 				// 전체 크기에서 공통으로 배분 
				$count++;
				$arr[] = array($this->_data[$i], -1);
			} else if (is_int($item[1])) { 		// 픽셀 고정 
				$temp -= $item[1];
				$arr[] = array($this->_data[$i], $item[1]);
			} else if (is_float($item[1])) { 	// 전체 크기에서 %로 픽셀 계산 
				$tempWidth = (int)($width * $item[1]);
				$arr[] = array($this->_data[$i], $tempWidth);
				$temp -= $tempWidth;
			}
		}
		
		$extraWidth = (int)($temp / $count);
		
		foreach ($arr as $i => $item) { 
			if ($item[1] == -1) { 
				$arr[$i][1] = $extraWidth;	
			}
		}
		
		$this->createItems($arr);
		
		$own = $this->getSize(true);
		
		// set size, position for child control 
		foreach($this->_childControl as $i => $control) { 
			if ($control) { 
				$size = array(
					'height' => $own['height']-3,
					'width' => $arr[$i][1]-3,
					'x' => $this->getPosX($arr, $i)+3,
					'y' => 3
				); 
				
				$control->setBounds($size['x'], $size['y'], $size['width'], $size['height']);
			}
		}
	}
	
	public function getPosX($arr, $i) { 
		if ($i > 0) { 
			$temp = 0;
			
			for ($index = 0; $index < $i; $index++) { 
				$temp += $arr[$index][1];
			}
			
			return $temp;
		}	

		return 0;
	}
}

?>
